package Data_Structure.Tree.Heap;

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Random;
import Data_Structure.List.Demo.Card;
/**
 * @className: Test2
 * @author: 芃
 * @description: Java集合当中提供的优先级队列->堆的应用
 * @date: 2023/8/25 12:19
 */
public class Test2 {
    /*对于放入优先级队列的元素，必须是可比较的，即自定义比较规则。
      可以使用Comparable和进行比较规则的定义。
      Comparator{
        小堆：o1 - o2
        大堆：o2 - o1
      }
    */
    public static void main(String[] args) {
        PriorityQueue<Card> priorityQueue = new PriorityQueue<>(new Comparator<Card>() {
            @Override
            public int compare(Card o1, Card o2) {
                if (o1.rank == o2.rank){
                    return o1.suit.compareTo(o2.suit);
                }else {
                    return o1.rank - o2.rank;
                }
            }
        });
        Card card1 = new Card(2,"C");
        priorityQueue.offer(card1);
        Card card = new Card(2,"B");
        priorityQueue.offer(card);
        System.out.println(priorityQueue.peek());
    }

    public static void main1(String[] args) {
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
        Random random = new Random();
        for (int i = 0; i < 10; i++) {
            int num = random.nextInt(100);
            priorityQueue.offer(num);
        }
        //offer-》放元素
        //poll-》弹出堆顶的元素
        //peek-》查看堆顶的元素
        //PriorityQueue默认创建小根堆，即根节点的值小于左右子树的值
        System.out.println(priorityQueue);
    }
}
